home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 551-575 / disk_570 / gadtoolsbox / source / source.lha / Slider.c < prev    next >
C/C++ Source or Header  |  1991-11-04  |  26KB  |  746 lines

  1. /*-- AutoRev header do NOT edit!
  2. *
  3. *   Program         :   Slider.c
  4. *   Copyright       :   © Copyright 1991 Jaba Development
  5. *   Author          :   Jan van den Baard
  6. *   Creation Date   :   08-Oct-91
  7. *   Current version :   1.00
  8. *   Translator      :   DICE v2.6
  9. *
  10. *   REVISION HISTORY
  11. *
  12. *   Date          Version         Comment
  13. *   ---------     -------         ------------------------------------------
  14. *   08-Oct-91     1.00            Slider editor.
  15. *
  16. *-- REV_END --*/
  17.  
  18. #include "GTEd.h"
  19. #include "Protos.h"
  20.  
  21. /*
  22.  * --- External referenced data
  23.  */
  24. extern ULONG                Class;
  25. extern UWORD                Code;
  26. extern struct Gadget       *Object;
  27. extern APTR                 MainVisualInfo;
  28. extern struct TextAttr      Topaz80;
  29. extern struct Screen       *MainScreen;
  30. extern struct Window       *MainWindow;
  31. extern UWORD                ngFlags;
  32. extern WORD                 ngLeft, ngTop, ngWidth, ngHeight;
  33. extern UBYTE               *PlaceList[];
  34. extern UWORD                PlaceFlags[];
  35. extern struct ExtGadgetList Gadgets;
  36. extern struct MemoryChain  *Chain;
  37. extern BOOL                 Saved;
  38.  
  39. /*
  40.  * --- Gadget ID's
  41.  */
  42. #define GD_TEXT             0
  43. #define GD_LABEL            1
  44. #define GD_UNDERSCORE       2
  45. #define GD_DISABLED         3
  46. #define GD_HIGHLABEL        4
  47. #define GD_IMMEDIATE        5
  48. #define GD_RELVERIFY        6
  49. #define GD_LORIENT          7
  50. #define GD_MIN              8
  51. #define GD_MAX              9
  52. #define GD_LEVEL            10
  53. #define GD_LEVELLEN         11
  54. #define GD_LEVELFORMAT      12
  55. #define GD_LEVELPLACE       13
  56. #define GD_TEXTPLACE        14
  57. #define GD_OK               15
  58. #define GD_CANCEL           16
  59.  
  60. /*
  61.  * --- Module data
  62.  */
  63. struct Window              *sl_Wnd    = NULL;
  64. struct Gadget              *sl_GList  = NULL;
  65. struct Gadget              *sl_Gadgets[15];
  66. BOOL                        sl_Score = FALSE, sl_Disabled = FALSE;
  67. BOOL                        sl_Immediate = FALSE;
  68. BOOL                        sl_RelVerify = FALSE;
  69. UWORD                       sl_Lorient = LORIENT_HORIZ, sl_Place = PLACETEXT_LEFT;
  70. WORD                        sl_Zoom[4];
  71. UBYTE                      *sl_Free[] = {
  72.     "Hori_zontal", "_Vertical  ", 0l };
  73.  
  74. struct TagItem              sl_nwTags[] = {
  75.     WA_Left,                0l,
  76.     WA_Top,                 0l,
  77.     WA_Width,               0l,
  78.     WA_Height,              0l,
  79.     WA_IDCMP,               IDCMP_CLOSEWINDOW | CYCLEIDCMP | BUTTONIDCMP | CHECKBOXIDCMP | MXIDCMP | IDCMP_REFRESHWINDOW | IDCMP_VANILLAKEY,
  80.     WA_Flags,               WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | WFLG_SMART_REFRESH | WFLG_ACTIVATE | WFLG_RMBTRAP,
  81.     WA_Gadgets,             0l,
  82.     WA_Title,               "Edit SLIDER gadget:",
  83.     WA_AutoAdjust,          TRUE,
  84.     WA_Zoom,                (Tag)sl_Zoom,
  85.     WA_CustomScreen,        0l,
  86.     TAG_DONE };
  87.  
  88. /*
  89.  * --- Create the slider gadget.
  90.  */
  91. long MakeSlider( void )
  92. {
  93.     struct ExtNewGadget *eng  = 0l;
  94.     struct TagItem      *tags = 0l;
  95.  
  96.     if ( eng = AllocItem( Chain, (long)sizeof( struct ExtNewGadget ), MEMF_PUBLIC )) {
  97.         if ( tags = MakeTagList( 10l )) {
  98.  
  99.             eng->en_NumTags = 10l;
  100.             eng->en_Tags = tags;
  101.  
  102.             ChangeSlider( eng );
  103.  
  104.             RemoveAllGadgets();
  105.  
  106.             AddTail(( struct List * )&Gadgets, ( struct Node * )eng );
  107.  
  108.             Renumber();
  109.  
  110.             if ( RemakeAllGadgets())
  111.                 return TRUE;
  112.  
  113.             Remove(( struct Node * )eng);
  114.         }
  115.     }
  116.  
  117.     MyRequest( "Ahem....", "CONTINUE", "Out of memory !" );
  118.  
  119.     if ( tags )         FreeTagList( tags, 10l );
  120.     if ( eng  )         FreeItem( Chain, eng, (long)sizeof( struct ExtNewGadget ));
  121.  
  122.     return FALSE;
  123. }
  124.  
  125. /*
  126.  * --- Change the slider gadget.
  127.  */
  128. void ChangeSlider( struct ExtNewGadget *eng )
  129. {
  130.     struct TagItem      *tags;
  131.     UBYTE               *slab, *text, *fmt, tn = 0;
  132.     long                 num;
  133.  
  134.     tags = eng->en_Tags;
  135.  
  136.     slab = (( struct StringInfo * )sl_Gadgets[ GD_LABEL ]->SpecialInfo )->Buffer;
  137.     text = (( struct StringInfo * )sl_Gadgets[ GD_TEXT  ]->SpecialInfo )->Buffer;
  138.     fmt  = (( struct StringInfo * )sl_Gadgets[ GD_LEVELFORMAT ]->SpecialInfo )->Buffer;
  139.  
  140.     eng->en_NewGadget.ng_LeftEdge   =   ngLeft;
  141.     eng->en_NewGadget.ng_TopEdge    =   ngTop;
  142.     eng->en_NewGadget.ng_Width      =   ngWidth;
  143.     eng->en_NewGadget.ng_Height     =   ngHeight;
  144.  
  145.     if ( strncmp( slab, "Gadget", 6 ) && strlen( slab )) {
  146.         strcpy( &eng->en_SourceLabel[0], slab );
  147.         eng->en_SpecialFlags |= EGF_USERLABEL;
  148.     } else
  149.         eng->en_SpecialFlags = 0l;
  150.  
  151.     if ( strlen( text )) {
  152.         strcpy( &eng->en_GadgetText[0], text );
  153.         eng->en_NewGadget.ng_GadgetText = &eng->en_GadgetText[0];
  154.         eng->en_NewGadget.ng_Flags      = ngFlags;
  155.     } else {
  156.         eng->en_NewGadget.ng_GadgetText = 0l;
  157.         eng->en_NewGadget.ng_Flags      = 0;
  158.     }
  159.  
  160.     eng->en_Kind    = SLIDER_KIND;
  161.  
  162.     if ( sl_Score && strlen( text )) {
  163.         tags[ tn   ].ti_Tag  = GT_Underscore;
  164.         tags[ tn++ ].ti_Data = (Tag)'_';
  165.     }
  166.  
  167.     if ( sl_Disabled )
  168.         eng->en_SpecialFlags |= EGF_DISABLED;
  169.  
  170.     if ( NOT sl_RelVerify )
  171.         eng->en_SpecialFlags |= EGF_NOGADGETUP;
  172.  
  173.     tags[ tn   ].ti_Tag  = GA_RelVerify;
  174.     tags[ tn++ ].ti_Data = TRUE;
  175.  
  176.     if ( sl_Immediate ) {
  177.         tags[ tn   ].ti_Tag  = GA_Immediate;
  178.         tags[ tn++ ].ti_Data = TRUE;
  179.     }
  180.  
  181.     if ( sl_Lorient == LORIENT_VERT ) {
  182.         tags[ tn   ].ti_Tag  = PGA_Freedom;
  183.         tags[ tn++ ].ti_Data = sl_Lorient;
  184.     }
  185.  
  186.     num = (( struct StringInfo * )sl_Gadgets[ GD_MIN ]->SpecialInfo )->LongInt;
  187.  
  188.     if ( num ) {
  189.         tags[ tn   ].ti_Tag  = GTSL_Min;
  190.         tags[ tn++ ].ti_Data = num;
  191.     }
  192.  
  193.     num = (( struct StringInfo * )sl_Gadgets[ GD_MAX ]->SpecialInfo )->LongInt;
  194.  
  195.     if ( num != 15 ) {
  196.         tags[ tn   ].ti_Tag  = GTSL_Max;
  197.         tags[ tn++ ].ti_Data = num;
  198.     }
  199.  
  200.     num = (( struct StringInfo * )sl_Gadgets[ GD_LEVEL ]->SpecialInfo )->LongInt;
  201.  
  202.     if ( num ) {
  203.         tags[ tn   ].ti_Tag  = GTSL_Level;
  204.         tags[ tn++ ].ti_Data = num;
  205.     }
  206.  
  207.     num = (( struct StringInfo * )sl_Gadgets[ GD_LEVELLEN ]->SpecialInfo )->LongInt;
  208.  
  209.     if ( num ) {
  210.         tags[ tn   ].ti_Tag  = GTSL_MaxLevelLen;
  211.         tags[ tn++ ].ti_Data = num;
  212.     }
  213.  
  214.     if ( fmt ) {
  215.         if ( eng->en_LevelFormat ) FreeItem( Chain, eng->en_LevelFormat, strlen( eng->en_LevelFormat ) + 1 );
  216.  
  217.         if ( eng->en_LevelFormat = AllocItem( Chain, strlen( fmt ) + 1, MEMF_PUBLIC )) {
  218.             tags[ tn   ].ti_Tag  = GTSL_LevelFormat;
  219.             tags[ tn++ ].ti_Data = eng->en_LevelFormat;
  220.             strcpy( eng->en_LevelFormat, fmt );
  221.         }
  222.     }
  223.  
  224.     if ( sl_Place != PLACETEXT_LEFT ) {
  225.         tags[ tn   ].ti_Tag  = GTSL_LevelPlace;
  226.         tags[ tn++ ].ti_Data = sl_Place;
  227.     }
  228.  
  229.     tags[ tn ].ti_Tag = TAG_DONE;
  230.  
  231.     Saved = FALSE;
  232. }
  233.  
  234. /*
  235.  * --- Open the EditSlider requester.
  236.  */
  237. long EditSlider( WORD x, WORD y, WORD x1, WORD y1, struct Gadget *edit )
  238. {
  239.     struct Gadget       *g;
  240.     struct ExtNewGadget *e;
  241.     struct NewGadget     ng;
  242.     BOOL                 running = TRUE, ok = FALSE, high = FALSE;
  243.     WORD                 l, t, w, h, btop, bleft, gw, gh;
  244.     UBYTE               *label = 0l, *slabel = 0l, gbuf[10], *cycle, *cycle1;
  245.     UBYTE               *fmt = 0l;
  246.     Tag                  place = 0l, place1 = 0l, num;
  247.     UWORD                flag  = PLACETEXT_LEFT, ID;
  248.     UWORD                min = 0, max = 15, level = 0, len = 2;
  249.  
  250.     cycle = cycle1 = &PlaceList[1];
  251.  
  252.     if ( edit ) {
  253.         e = FindExtGad( edit );
  254.  
  255.         x  = e->en_NewGadget.ng_LeftEdge;
  256.         y  = e->en_NewGadget.ng_TopEdge;
  257.         gw = e->en_NewGadget.ng_Width;
  258.         gh = e->en_NewGadget.ng_Height;
  259.  
  260.         label  = &e->en_GadgetText[0];
  261.         slabel = &e->en_SourceLabel[0];
  262.  
  263.         flag = e->en_NewGadget.ng_Flags;
  264.  
  265.         if ( flag & PLACETEXT_LEFT  ) place = 0l;
  266.         if ( flag & PLACETEXT_RIGHT ) place = 1l;
  267.         if ( flag & PLACETEXT_ABOVE ) place = 2l;
  268.         if ( flag & PLACETEXT_BELOW ) place = 3l;
  269.  
  270.         if ( flag & NG_HIGHLABEL    ) high = TRUE;
  271.  
  272.         sl_Score     = MyTagInArray( GT_Underscore, e->en_Tags );
  273.         sl_Immediate = MyTagInArray( GA_Immediate,  e->en_Tags );
  274.         sl_RelVerify = MyTagInArray( GA_RelVerify,  e->en_Tags );
  275.  
  276.         if (( e->en_SpecialFlags & EGF_NOGADGETUP ) == EGF_NOGADGETUP )
  277.             sl_RelVerify = FALSE;
  278.  
  279.         if ( MyTagInArray( PGA_Freedom, e->en_Tags ))
  280.             sl_Lorient = LORIENT_VERT;
  281.         else
  282.             sl_Lorient = LORIENT_HORIZ;
  283.  
  284.         min      = GetTagData( GTSL_Min,        0, e->en_Tags );
  285.         max      = GetTagData( GTSL_Max,       15, e->en_Tags );
  286.         level    = GetTagData( GTSL_Level,      0, e->en_Tags );
  287.         len      = GetTagData( GTSL_MaxLevelLen,2, e->en_Tags );
  288.         sl_Place = GetTagData( GTSL_LevelPlace, PLACETEXT_LEFT, e->en_Tags );
  289.  
  290.         if ( sl_Place == PLACETEXT_LEFT  ) place1 = 0l;
  291.         if ( sl_Place == PLACETEXT_RIGHT ) place1 = 1l;
  292.         if ( sl_Place == PLACETEXT_ABOVE ) place1 = 2l;
  293.         if ( sl_Place == PLACETEXT_BELOW ) place1 = 3l;
  294.  
  295.         fmt = e->en_LevelFormat;
  296.  
  297.         if (( e->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  298.             sl_Disabled = TRUE;
  299.         else
  300.             sl_Disabled = FALSE;
  301.  
  302.     } else {
  303.         if ( x > x1 ) { gw = x; x = x1; x1 = gw; }
  304.         if ( y > y1 ) { gh = y; y = y1; y1 = gh; }
  305.  
  306.         gw = x1 - x + 1;
  307.         gh = y1 - y + 1;
  308.     }
  309.  
  310.     btop  = MainScreen->WBorTop + 1 + MainScreen->RastPort.TxHeight;
  311.     bleft = MainScreen->WBorLeft;
  312.  
  313.     w = bleft + MainScreen->WBorRight  + 300;
  314.     h = btop  + MainScreen->WBorBottom + 175;
  315.     l = (( MainScreen->Width  >> 1 ) - ( w >> 1 ));
  316.     t = (( MainScreen->Height >> 1 ) - ( h >> 1 ));
  317.  
  318.     sl_Zoom[0] = 0;
  319.     sl_Zoom[1] = btop;
  320.     sl_Zoom[2] = 200;
  321.     sl_Zoom[3] = btop;
  322.  
  323.     sl_nwTags[0 ].ti_Data = l;
  324.     sl_nwTags[1 ].ti_Data = t;
  325.     sl_nwTags[2 ].ti_Data = w;
  326.     sl_nwTags[3 ].ti_Data = h;
  327.     sl_nwTags[10].ti_Data = (Tag)MainScreen;
  328.  
  329.     if ( g = CreateContext( &sl_GList ))  {
  330.  
  331.         ng.ng_LeftEdge      =   bleft + 56;
  332.         ng.ng_TopEdge       =   btop + 4;
  333.         ng.ng_Width         =   236;
  334.         ng.ng_Height        =   12;
  335.         ng.ng_GadgetText    =   "_Text ";
  336.         ng.ng_TextAttr      =   &Topaz80;
  337.         ng.ng_GadgetID      =   GD_TEXT;
  338.         ng.ng_Flags         =   PLACETEXT_LEFT;
  339.         ng.ng_VisualInfo    =   MainVisualInfo;
  340.         ng.ng_UserData      =   0l;
  341.  
  342.         g = CreateGadget( STRING_KIND, g, &ng, GTST_String, (Tag)label, GTST_MaxChars, (Tag)GT_MAXLABELNAME + 1, GT_Underscore, (Tag)'_', TAG_DONE );
  343.  
  344.         SetStringGadget( g );
  345.  
  346.         sl_Gadgets[ GD_TEXT ] = g;
  347.  
  348.         ng.ng_TopEdge       =   btop + 16;
  349.         ng.ng_GadgetText    =   "La_bel";
  350.         ng.ng_GadgetID      =   GD_LABEL;
  351.  
  352.         g = CreateGadget( STRING_KIND, g, &ng, GTST_String, (Tag)slabel, GTST_MaxChars, (Tag)GT_MAXLABEL + 1, GT_Underscore, (Tag)'_', TAG_DONE );
  353.  
  354.         SetStringGadget( g );
  355.  
  356.         sl_Gadgets[ GD_LABEL ] = g;
  357.  
  358.         ng.ng_LeftEdge      =   bleft + 96;
  359.         ng.ng_TopEdge       =   btop + 28;
  360.         ng.ng_GadgetText    =   "_Underscore";
  361.         ng.ng_GadgetID      =   GD_UNDERSCORE;
  362.  
  363.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, (Tag)sl_Score, GT_Underscore, (Tag)'_', TAG_DONE );
  364.  
  365.         sl_Gadgets[ GD_UNDERSCORE ] = g;
  366.  
  367.         ng.ng_LeftEdge      =   bleft + 266;
  368.         ng.ng_GadgetText    =   "_Disabled  ";
  369.         ng.ng_GadgetID      =   GD_DISABLED;
  370.  
  371.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, (Tag)sl_Disabled, GT_Underscore, (Tag)'_', TAG_DONE );
  372.  
  373.         sl_Gadgets[ GD_DISABLED ] = g;
  374.  
  375.         ng.ng_LeftEdge      =   bleft + 96;
  376.         ng.ng_TopEdge       =   btop + 39;
  377.         ng.ng_GadgetText    =   "_High Label";
  378.         ng.ng_GadgetID      =   GD_HIGHLABEL;
  379.  
  380.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, (Tag)high, GT_Underscore, '_', TAG_DONE );
  381.  
  382.         sl_Gadgets[ GD_HIGHLABEL ] = g;
  383.  
  384.         ng.ng_LeftEdge      =   bleft + 266;
  385.         ng.ng_GadgetText    =   "_Immediate ";
  386.         ng.ng_GadgetID      =   GD_IMMEDIATE;
  387.  
  388.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, (Tag)sl_Immediate, GT_Underscore, '_', TAG_DONE );
  389.  
  390.         sl_Gadgets[ GD_IMMEDIATE ] = g;
  391.  
  392.         ng.ng_LeftEdge      =   bleft + 96;
  393.         ng.ng_TopEdge       =   btop +  50;
  394.         ng.ng_GadgetText    =   "_Relverify ";
  395.         ng.ng_GadgetID      =   GD_RELVERIFY;
  396.  
  397.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, (Tag)sl_RelVerify, GT_Underscore, '_', TAG_DONE );
  398.  
  399.         sl_Gadgets[ GD_RELVERIFY ] = g;
  400.  
  401.         ng.ng_TopEdge       =   btop + 50;
  402.         ng.ng_LeftEdge      =   bleft + 266;
  403.         ng.ng_GadgetText    =   0l;
  404.         ng.ng_GadgetID      =   GD_LORIENT;
  405.  
  406.         g = CreateGadget( MX_KIND, g, &ng, GTMX_Labels, sl_Free, GTMX_Active, (Tag)sl_Lorient - 1, GT_Underscore, '_', TAG_DONE );
  407.  
  408.         sl_Gadgets[ GD_LORIENT ] = g;
  409.  
  410.         ng.ng_LeftEdge      =   bleft + 96;
  411.         ng.ng_TopEdge       =   btop + 68;
  412.         ng.ng_Width         =   196;
  413.         ng.ng_Height        =   12;
  414.         ng.ng_GadgetText    =   "_Min       ";
  415.         ng.ng_GadgetID      =   GD_MIN;
  416.  
  417.         g = CreateGadget( INTEGER_KIND, g, &ng, GTIN_Number, min, GTIN_MaxChars, 5l, GT_Underscore, '_', TAG_DONE );
  418.  
  419.         SetStringGadget( g );
  420.  
  421.         sl_Gadgets[ GD_MIN ] = g;
  422.  
  423.         ng.ng_TopEdge       =   btop + 80;
  424.         ng.ng_GadgetText    =   "Ma_x       ";
  425.         ng.ng_GadgetID      =   GD_MAX;
  426.  
  427.         g = CreateGadget( INTEGER_KIND, g, &ng, GTIN_Number, max, GTIN_MaxChars, 5l, GT_Underscore, '_', TAG_DONE );
  428.  
  429.         SetStringGadget( g );
  430.  
  431.         sl_Gadgets[ GD_MAX ] = g;
  432.  
  433.         ng.ng_TopEdge       =   btop + 92;
  434.         ng.ng_GadgetText    =   "L_evel     ";
  435.         ng.ng_GadgetID      =   GD_LEVEL;
  436.  
  437.         g = CreateGadget( INTEGER_KIND, g, &ng, GTIN_Number, level, GTIN_MaxChars, 5l, GT_Underscore, '_', TAG_DONE );
  438.  
  439.         SetStringGadget( g );
  440.  
  441.         sl_Gadgets[ GD_LEVEL ] = g;
  442.  
  443.         ng.ng_TopEdge       =   btop + 104;
  444.         ng.ng_GadgetText    =   "Level _Size";
  445.         ng.ng_GadgetID      =   GD_LEVELLEN;
  446.  
  447.         g = CreateGadget( INTEGER_KIND, g, &ng, GTIN_Number, len, GTIN_MaxChars, 5l, GT_Underscore, '_', TAG_DONE );
  448.  
  449.         SetStringGadget( g );
  450.  
  451.         sl_Gadgets[ GD_LEVELLEN ] = g;
  452.  
  453.         ng.ng_TopEdge       =   btop +  116;
  454.         ng.ng_GadgetText    =   "_Format    ";
  455.         ng.ng_GadgetID      =   GD_LEVELFORMAT;
  456.  
  457.         g = CreateGadget( STRING_KIND, g, &ng, GTST_String, fmt, GTIN_MaxChars, 80l, GT_Underscore, '_', TAG_DONE );
  458.  
  459.         SetStringGadget( g );
  460.  
  461.         sl_Gadgets[ GD_LEVELFORMAT ] = g;
  462.  
  463.         ng.ng_TopEdge       =   btop + 128;
  464.         ng.ng_Height        =   13;
  465.         ng.ng_GadgetText    =   "Lev. _Place";
  466.         ng.ng_GadgetID      =   GD_LEVELPLACE;
  467.  
  468.         g = CreateGadget( CYCLE_KIND, g, &ng, GTCY_Labels, cycle1, GTCY_Active, place1, GT_Underscore, '_', TAG_DONE );
  469.  
  470.         sl_Gadgets[ GD_LEVELPLACE ] = g;
  471.  
  472.         ng.ng_TopEdge       =   btop + 141;
  473.         ng.ng_Height        =   13;
  474.         ng.ng_GadgetText    =   "Text P_lace";
  475.         ng.ng_GadgetID      =   GD_TEXTPLACE;
  476.  
  477.         g = CreateGadget( CYCLE_KIND, g, &ng, GTCY_Labels, (Tag)cycle, GTCY_Active, place, GT_Underscore, (Tag)'_', TAG_DONE );
  478.  
  479.         sl_Gadgets[ GD_TEXTPLACE ] = g;
  480.  
  481.         ng.ng_LeftEdge      =   bleft + 8;
  482.         ng.ng_TopEdge       =   btop + 158;
  483.         ng.ng_Width         =   90;
  484.         ng.ng_GadgetText    =   "_OK";
  485.         ng.ng_Flags         =   PLACETEXT_IN;
  486.         ng.ng_GadgetID      =   GD_OK;
  487.  
  488.         g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  489.  
  490.         ng.ng_LeftEdge      =   bleft + 202;
  491.         ng.ng_GadgetText    =   "_CANCEL";
  492.         ng.ng_GadgetID      =   GD_CANCEL;
  493.  
  494.         g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  495.  
  496.         if ( g ) {
  497.  
  498.             sl_nwTags[6].ti_Data = (Tag)sl_GList;
  499.  
  500.             if ( sl_Wnd = OpenWindowTagList( 0l, sl_nwTags )) {
  501.  
  502.                 sl_Zoom[0] = l;
  503.                 sl_Zoom[1] = t;
  504.                 sl_Zoom[2] = w;
  505.                 sl_Zoom[3] = h;
  506.  
  507.                 GT_RefreshWindow( sl_Wnd, 0l );
  508.  
  509.                 do {
  510.                     WaitPort( sl_Wnd->UserPort );
  511.  
  512.                     while ( ReadIMsg( sl_Wnd )) {
  513.  
  514.                         switch ( Class ) {
  515.  
  516.                             case    IDCMP_REFRESHWINDOW:
  517.                                 GT_BeginRefresh( sl_Wnd );
  518.                                 GT_EndRefresh( sl_Wnd, TRUE );
  519.                                 break;
  520.  
  521.                             case    IDCMP_CLOSEWINDOW:
  522.                                 running = FALSE;
  523.                                 break;
  524.  
  525.                             case    IDCMP_GADGETDOWN:
  526.                                 switch( Object->GadgetID ) {
  527.  
  528.                                     case    GD_LORIENT:
  529.                                         if ( NOT Code ) sl_Lorient = LORIENT_HORIZ;
  530.                                         else            sl_Lorient = LORIENT_VERT;
  531.                                         break;
  532.                                 }
  533.                                 break;
  534.  
  535.                             case    IDCMP_GADGETUP:
  536.                                 switch( Object->GadgetID ) {
  537.  
  538.                                     case    GD_UNDERSCORE:
  539.                                         FlipFlop( 0l, 0l, 0l, &sl_Score );
  540.                                         break;
  541.  
  542.                                     case    GD_DISABLED:
  543.                                         FlipFlop( 0l, 0l, 0l, &sl_Disabled );
  544.                                         break;
  545.  
  546.                                     case    GD_HIGHLABEL:
  547.                                         FlipFlop( 0l, 0l, 0l, &high );
  548.                                         break;
  549.  
  550.                                     case    GD_IMMEDIATE:
  551.                                         FlipFlop( 0l, 0l, 0l, &sl_Immediate );
  552.                                         break;
  553.  
  554.                                     case    GD_RELVERIFY:
  555.                                         FlipFlop( 0l, 0l, 0l, &sl_RelVerify );
  556.                                         break;
  557.  
  558.                                     case    GD_MIN:
  559.  
  560.                                         num = (( struct StringInfo * )sl_Gadgets[ GD_MIN ]->SpecialInfo )->LongInt;
  561.  
  562.                                         if ( num < 0 ) {
  563.                                             DisplayBeep( MainScreen );
  564.                                             GT_SetGadgetAttrs( sl_Gadgets[ GD_MIN ], sl_Wnd, 0l, GTIN_Number, 0l, TAG_DONE );
  565.                                         }
  566.                                         break;
  567.  
  568.                                     case    GD_MAX:
  569.  
  570.                                         num = (( struct StringInfo * )sl_Gadgets[ GD_MAX ]->SpecialInfo )->LongInt;
  571.  
  572.                                         if ( num < 0 ) {
  573.                                             DisplayBeep( MainScreen );
  574.                                             GT_SetGadgetAttrs( sl_Gadgets[ GD_MAX ], sl_Wnd, 0l, GTIN_Number, 0l, TAG_DONE );
  575.                                         }
  576.                                         break;
  577.  
  578.                                     case    GD_LEVEL:
  579.  
  580.                                         num = (( struct StringInfo * )sl_Gadgets[ GD_LEVEL ]->SpecialInfo )->LongInt;
  581.  
  582.                                         if ( num < 0 ) {
  583.                                             DisplayBeep( MainScreen );
  584.                                             GT_SetGadgetAttrs( sl_Gadgets[ GD_LEVEL ], sl_Wnd, 0l, GTIN_Number, 0l, TAG_DONE );
  585.                                         }
  586.                                         break;
  587.  
  588.                                     case    GD_LEVELLEN:
  589.  
  590.                                         num = (( struct StringInfo * )sl_Gadgets[ GD_LEVELLEN ]->SpecialInfo )->LongInt;
  591.  
  592.                                         if ( num < 0 ) {
  593.                                             DisplayBeep( MainScreen );
  594.                                             GT_SetGadgetAttrs( sl_Gadgets[ GD_LEVELLEN ], sl_Wnd, 0l, GTIN_Number, 0l, TAG_DONE );
  595.                                         }
  596.                                         break;
  597.  
  598.                                     case    GD_LEVELPLACE:
  599.                                         if( place1++ == 3 )
  600.                                             place1 = 0;
  601.  
  602.                                         sl_Place = PlaceFlags[ place1 + 1 ];
  603.                                         break;
  604.  
  605.                                     case    GD_TEXTPLACE:
  606.                                         if ( place++ == 3 )
  607.                                             place = 0;
  608.  
  609.                                         flag = PlaceFlags[ place + 1 ];
  610.                                         break;
  611.  
  612.                                     case    GD_OK:
  613.                                         Ok:
  614.                                         ok = TRUE;
  615.  
  616.                                     case    GD_CANCEL:
  617.                                         Cancel:
  618.                                         running = FALSE;
  619.                                         break;
  620.                                 }
  621.                                 break;
  622.  
  623.                             case    IDCMP_VANILLAKEY:
  624.                                 switch( Code ) {
  625.  
  626.                                     case    't':
  627.                                         ID = GD_TEXT;
  628.                                         goto Activate;
  629.  
  630.                                     case    'b':
  631.                                         ID = GD_LABEL;
  632.                                         goto Activate;
  633.  
  634.                                     case    'u':
  635.                                         FlipFlop( sl_Wnd, sl_Gadgets, GD_UNDERSCORE, &sl_Score );
  636.                                         break;
  637.  
  638.                                     case    'd':
  639.                                         FlipFlop( sl_Wnd, sl_Gadgets, GD_DISABLED, &sl_Disabled );
  640.                                         break;
  641.  
  642.                                     case    'h':
  643.                                         FlipFlop( sl_Wnd, sl_Gadgets, GD_HIGHLABEL, &high );
  644.                                         break;
  645.  
  646.                                     case    'i':
  647.                                         FlipFlop( sl_Wnd, sl_Gadgets, GD_IMMEDIATE, &sl_Immediate );
  648.                                         break;
  649.  
  650.                                     case    'r':
  651.                                         FlipFlop( sl_Wnd, sl_Gadgets, GD_RELVERIFY, &sl_RelVerify );
  652.                                         break;
  653.  
  654.                                     case    'z':
  655.                                         sl_Lorient = LORIENT_HORIZ;
  656.                                         GT_SetGadgetAttrs( sl_Gadgets[ GD_LORIENT ], sl_Wnd, 0l, GTMX_Active, 0l, TAG_DONE );
  657.                                         break;
  658.  
  659.                                     case    'v':
  660.                                         sl_Lorient = LORIENT_VERT;
  661.                                         GT_SetGadgetAttrs( sl_Gadgets[ GD_LORIENT ], sl_Wnd, 0l, GTMX_Active, 1l, TAG_DONE );
  662.                                         break;
  663.  
  664.                                     case    'm':
  665.                                         ID = GD_MIN;
  666.                                         goto Activate;
  667.  
  668.                                     case    'x':
  669.                                         ID = GD_MAX;
  670.                                         goto Activate;
  671.  
  672.                                     case    'e':
  673.                                         ID = GD_LEVEL;
  674.                                         goto Activate;
  675.  
  676.                                     case    's':
  677.                                         ID = GD_LEVELLEN;
  678.                                         goto Activate;
  679.  
  680.                                     case    'f':
  681.                                         ID = GD_LEVELFORMAT;
  682.                                         goto Activate;
  683.  
  684.                                     case    'p':
  685.                                         if ( place1++ == 3 )
  686.                                             place1 = 0;
  687.  
  688.                                         sl_Place = PlaceFlags[ place1 + 1 ];
  689.                                         GT_SetGadgetAttrs( sl_Gadgets[ GD_LEVELPLACE ], sl_Wnd, 0l, GTCY_Active, place1, TAG_DONE );
  690.                                         break;
  691.  
  692.                                     case    'l':
  693.                                         if ( place++ == 3 )
  694.                                             place = 0;
  695.  
  696.                                         flag = PlaceFlags[ place + 1 ];
  697.                                         GT_SetGadgetAttrs( sl_Gadgets[ GD_TEXTPLACE ], sl_Wnd, 0l, GTCY_Active, place, TAG_DONE );
  698.                                         break;
  699.  
  700.                                     case    'o':
  701.                                         goto Ok;
  702.  
  703.                                     case    'c':
  704.                                         goto Cancel;
  705.                                 }
  706.                                 break;
  707.                                 Activate:
  708.                                 ActivateGadget( sl_Gadgets[ ID ], sl_Wnd, 0l );
  709.                                 break;
  710.                         }
  711.                     }
  712.                 } while ( running );
  713.             }
  714.         }
  715.     }
  716.  
  717.     if ( ok) {
  718.         if ( high ) flag |= NG_HIGHLABEL;
  719.  
  720.         ngFlags     =   flag;
  721.         ngLeft      =   x;
  722.         ngTop       =   y;
  723.         ngWidth     =   gw;
  724.         ngHeight    =   gh;
  725.         if ( NOT edit )
  726.             ok = MakeSlider();
  727.         else {
  728.             RemoveAllGadgets();
  729.             ChangeSlider( e );
  730.             Renumber();
  731.             ok = RemakeAllGadgets();
  732.         }
  733.     } else if ( NOT edit )
  734.         Box( x, y, x1, y1 );
  735.  
  736.     if ( sl_Wnd )           CloseWindow( sl_Wnd );
  737.     if ( sl_GList )         FreeGadgets( sl_GList );
  738.  
  739.     sl_Wnd     = 0l;
  740.     sl_GList   =  0l;
  741.  
  742.     ClearMsgPort( MainWindow->UserPort );
  743.  
  744.     return( ok );
  745. }
  746.